home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / p4 / p4-1_2c.lha / p4-1.2c / lib / p4_args.c < prev    next >
C/C++ Source or Header  |  1993-05-24  |  6KB  |  229 lines

  1. /*
  2.  * p4_args.c   Code that looks at the arguments, recognizes any that are
  3.  *             for p4, uses the arguments, and removes them from the
  4.  *             command line args.
  5.  */
  6. #include "p4.h"
  7. #include "p4_sys.h"
  8.  
  9. /* Macro used to see if an arg is not following the correct format. */
  10. #define bad_arg(a)    ( ((a)==NULL) || ((*(a)) == '-') )
  11.  
  12. static char pgm[100];        /* Used to keep argv[0] for the usage cmd. */
  13.  
  14. static P4VOID usage();
  15. static P4VOID print_version_info();
  16. static P4VOID strip_out_args();
  17.  
  18.  
  19. P4VOID process_args(argc, argv)
  20. int *argc;
  21. char **argv;
  22. {
  23.     char *s, **a;
  24.     int c;
  25.     FILE *fp;
  26.  
  27.     /* Put the name of the called program (according to the args) into pgm */
  28.     s = (char *)  rindex(*argv, '/');
  29.     if (s)
  30.     strcpy(pgm, s + 1);
  31.     else
  32.     strcpy(pgm, *argv);
  33.  
  34.     /* Set all command line flags (except procgroup) to their defaults */
  35.     debug_level = 0;
  36.     remote_debug_level = 0;
  37.     bm_outfile[0] = '\0';
  38.     procgroup_file[0] = '\0';
  39.     strcpy(local_domain, "");
  40.  
  41.     /* Move to last argument, so that we can go backwards. */
  42.     a = &argv[*argc - 1];
  43.  
  44.     /*
  45.      * Loop backwards through arguments, catching the ones that start with
  46.      * '-'.  Backwards is more efficient when you are stripping things out.
  47.      */
  48.     for (c = (*argc); c > 1; c--, a--)
  49.     {
  50.  
  51.     if (**a != '-')
  52.         continue;
  53.  
  54.     if (!strcmp(*a, "-pg")      ||
  55.         !strcmp(*a, "-pg")      ||
  56.         !strcmp(*a, "-dbg")     ||
  57.         !strcmp(*a, "-ssport")  ||
  58.         !strcmp(*a, "-rdbg")    ||
  59.         !strcmp(*a, "-gm")      ||
  60.         !strcmp(*a, "-dmn")     ||
  61.         !strcmp(*a, "-out")     ||
  62.         !strcmp(*a, "-rout")    ||
  63.         !strcmp(*a, "-log")     ||
  64.         !strcmp(*a, "-norem")   ||
  65.         !strcmp(*a, "-version") ||
  66.         !strcmp(*a, "-help"))
  67.     {
  68.         printf("Warning: %s should be -p4%s\n",*a,(*a)+1);
  69.     }
  70.  
  71.  
  72.     if (!strcmp(*a, "-p4pg")  ||  !strcmp(*a, "-pg"))
  73.     {
  74.         if (bad_arg(a[1]))
  75.         usage();
  76.         strcpy(procgroup_file, a[1]);
  77.         strip_out_args(a, argc, &c, 2);
  78.         continue;
  79.     }
  80.     if (!strcmp(*a, "-p4dbg") ||  !strcmp(*a, "-dbg"))
  81.     {
  82.         if (bad_arg(a[1]))
  83.         usage();
  84.         debug_level = atoi(a[1]);
  85.         strip_out_args(a, argc, &c, 2);
  86.         continue;
  87.     }
  88.     if (!strcmp(*a, "-p4ssport") ||  !strcmp(*a, "-ssport"))
  89.     {
  90.         if (bad_arg(a[1]))
  91.         usage();
  92.         sserver_port = atoi(a[1]);
  93.         strip_out_args(a, argc, &c, 2);
  94.         continue;
  95.     }
  96.     if (!strcmp(*a, "-p4rdbg") ||  !strcmp(*a, "-rdbg"))
  97.     {
  98.         if (bad_arg(a[1]))
  99.         usage();
  100.         remote_debug_level = atoi(a[1]);
  101.         strip_out_args(a, argc, &c, 2);
  102.         continue;
  103.     }
  104.     if (!strcmp(*a, "-p4gm") ||  !strcmp(*a, "-gm"))
  105.     {
  106.         if (bad_arg(a[1]))
  107.         usage();
  108.         globmemsize = atoi(a[1]);
  109.         strip_out_args(a, argc, &c, 2);
  110.         continue;
  111.     }
  112.     if (!strcmp(*a, "-p4dmn") ||  !strcmp(*a, "-dmn"))
  113.     {
  114.         if (bad_arg(a[1]))
  115.         usage();
  116.         strcpy(local_domain, a[1]);
  117.         strip_out_args(a, argc, &c, 2);
  118.         continue;
  119.     }
  120.     if (!strcmp(*a, "-p4out") ||  !strcmp(*a, "-out"))
  121.     {
  122.         if (bad_arg(a[1]))
  123.         usage();
  124.         strcpy(bm_outfile, a[1]);
  125.         strip_out_args(a, argc, &c, 2);
  126.         continue;
  127.     }
  128.     if (!strcmp(*a, "-p4rout") ||  !strcmp(*a, "-rout"))
  129.     {
  130.         if (bad_arg(a[1]))
  131.         usage();
  132.         strcpy(rm_outfile_head, a[1]);
  133.         strip_out_args(a, argc, &c, 2);
  134.         continue;
  135.     }
  136.     if (!strcmp(*a, "-p4log") ||  !strcmp(*a, "-log"))
  137.     {
  138.         strip_out_args(a, argc, &c, 1);
  139.         logging_flag = TRUE;
  140.         continue;
  141.     }
  142.     if (!strcmp(*a, "-p4norem") ||  !strcmp(*a, "-norem"))
  143.     {
  144.         strip_out_args(a, argc, &c, 1);
  145.         no_remotes = TRUE;
  146.         continue;
  147.     }
  148.     if (!strcmp(*a, "-p4version") ||  !strcmp(*a, "-version"))
  149.     {
  150.         strip_out_args(a, argc, &c, 1);
  151.         print_version_info();
  152.         continue;
  153.     }
  154.     if (!strcmp(*a, "-p4help") ||  !strcmp(*a, "-help"))
  155.         usage();
  156.     }
  157.     if (procgroup_file[0] == '\0')
  158.     {
  159.     strcpy(procgroup_file,pgm);
  160.     strcat(procgroup_file,".pg");
  161.     if ((fp = fopen(procgroup_file,"r")) == NULL)  /* pgm.pg not there */
  162.         strcpy(procgroup_file, "procgroup");
  163.     else
  164.         fclose(fp);
  165.     }
  166.     p4_dprintfl(10,"using procgroup file %s\n",procgroup_file);
  167. }
  168.  
  169. static P4VOID strip_out_args(argv, argc, c, num)
  170. char **argv;
  171. int *argc, *c, num;
  172. {
  173.     char **a;
  174.     int i;
  175.  
  176.     /* Strip out the argument. */
  177.     for (a = argv, i = (*c); i <= *argc; i++, a++)
  178.     *a = (*(a + num));
  179.     (*argc) -= num;
  180. }
  181.  
  182. static P4VOID usage()
  183. {
  184.     print_version_info();
  185.     printf("p4 usage: %s [p4 options]\n", pgm);
  186.     printf("Valid p4 options:\n");
  187.     printf("\t-p4help            get this message\n");
  188.     printf("\t-p4pg      <file>  set procgroup file\n");
  189.     printf("\t-p4dbg    <level>  set debug level\n");
  190.     printf("\t-p4rdbg   <level>  set remote debug level\n");
  191.     printf("\t-p4gm      <size>  set globmemsize\n");
  192.     printf("\t-p4dmn   <domain>  set domainname\n");
  193.     printf("\t-p4out     <file>  set output file for master\n");
  194.     printf("\t-p4rout    <file>  set output file prefix for remote masters\n");
  195.     printf("\t-p4ssport <port#>  set private port number for secure server\n");
  196.     printf("\t-p4norem           don't start remote processes\n");
  197. #ifdef ALOG_TRACE
  198.     printf("\t-p4log             enable internal p4 logging by alog\n");
  199. #endif
  200.     printf("\t-p4version         print current p4 version number\n");
  201.     printf("\n");
  202.     exit(-1);
  203.  
  204. }
  205.  
  206. static P4VOID print_version_info()
  207. {
  208.         printf("\n");
  209.         printf("p4 version number:  %s\n",p4_version());
  210.         printf("p4  date compiled:  %s\n",P4_COMPILED_TIME);
  211.         printf("p4   machine type:  %s\n",P4_MACHINE_TYPE);
  212. #ifdef P4_DPRINTFL
  213.         printf("   P4_DPRINTFL is:  on\n");
  214. #else
  215.         printf("   P4_DPRINTFL is:  off\n");
  216. #endif
  217. #ifdef ALOG_TRACE
  218.         printf("    ALOG_TRACE is:  on\n");
  219. #else
  220.         printf("    ALOG_TRACE is:  off\n");
  221. #endif
  222. #if defined(SYSV_IPC)
  223.         printf("      SYSV IPC is:  on\n");
  224. #else
  225.         printf("      SYSV IPC is:  off\n");
  226. #endif
  227.         printf("\n");
  228. }
  229.